home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / HARDWARE.SWG / 0020_CPU Speed.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  2KB  |  77 lines

  1. {
  2. >>> How can i determine the machine's CPU clock speed from a TP
  3. >>> program? An 100% accurate result is not required.
  4.  
  5. >> Use a counter and continually increase it. Check the clock and see how
  6.  
  7. > There's a big problem : Newer CPUs are faster in executing
  8. > this commands and caching really speed's up the timer.
  9. }
  10.  
  11. CONST
  12.   Cpu8086  = 1;
  13.   Cpu80286 = 2;
  14.   Cpu80386 = 3;
  15.   Cpu80486 = 4;
  16.  
  17. VAR
  18.   CPU : BYTE;
  19.  
  20.  
  21. FUNCTION CPUSpeed : BYTE; Assembler;
  22. Asm
  23.  MOV   DX,Cpu8086
  24.  PUSH  SP
  25.  POP   AX
  26.  CMP   SP,AX
  27.  JNE   @OUT
  28.  MOV   DX, Cpu80286
  29.  PUSHF
  30.  
  31.  POP   AX
  32.  OR   AX,4000h
  33.  PUSH  AX
  34.  POPF
  35.  PUSHF
  36.  POP   AX
  37.  TEST  AX,4000h
  38.  JE   @OUT
  39.  MOV DX, Cpu80386
  40.  {"DB 66h" indicates '386 extended instruction}
  41.  DB 66h; MOV   BX, SP      {MOV EBX, ESP}
  42.  DB 66h, 83h, 0E4h, 0FCh   {AND ESP, FFFC}
  43.  DB 66h; PUSHF             {PUSHFD}
  44.  DB 66h; POP AX            {POP EAX}
  45.  DB 66h; MOV   CX, AX      {MOV ECX, EAX}
  46.  DB 66h, 35h, 00h
  47.  DB 00h, 04h, 00           {XOR EAX, 00040000}
  48.  DB 66h; PUSH   AX     {PUSH EAX}
  49.  
  50.  DB 66h; POPF              {POPFD}
  51.  DB 66h; PUSHF             {PUSHFD}
  52.  DB 66h; POP   AX     {POP EAX}
  53.  DB 66h, 25h, 00h
  54.  DB 00h, 04h, 00h          {AND EAX, 00040000}
  55.  DB 66h, 81h, 0E1h, 00h
  56.  DB 00h, 04h, 00h          {AND ECX, 00040000}
  57.  DB 66h; CMP   AX, CX      {CMP EAX, ECX}
  58.  JE @Not486
  59.  MOV DX, Cpu80486
  60. @Not486:
  61.  DB 66h; PUSH   CX         {PUSH EXC}
  62.  DB 66h; POPF              {POPFD}
  63.  DB 66h; MOV   SP, BX      {MOV ESP, EBX}
  64. @Out:
  65.  MOV AX, DX
  66. end;
  67.  
  68.  
  69. begin { main }
  70.  
  71.  
  72.   Writeln(CPUSpeed);  { 1, 2, 3, or 4 is returned; see above consts }
  73.  
  74.  
  75. end.
  76.  
  77.